package biolabs.model.abscretion;

import biolabs.core.WrappedDelegate

trait Abscretor[Self <: Abscretor[Self, P], P] {

	def abscretionDelegate(substance: Any): Option[AbscretionDelegate[P]]
	def abscretionDelegate_wrapped(substance: Any): Option[WrappedDelegate[AbscretionDelegate[P], Self]]
	def getAbscretionPointsFor(substance: Any): Iterable[(P, AbscretionPoint)]
	def getAbscretionPointsAt(pos: P): Iterable[(Any, AbscretionPoint)]
	def getAbscretionPoint(substance: Any, pos: P): Option[AbscretionPoint]
	def addReceptors(substance: Any, amount: Int);

}
